package reflectionV2.static_proxy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reflectionV2.IUserDao;
import reflectionV2.UserDao;

/**
 * 这种方式缺点很明显：
 *
 * 1. 目标对象必须要实现接口
 *
 * 2. 代理对象要实现与目标对象一样的接口，即依赖目标对象的接口，如果接口功能变化，目标对象变化，就会引起代理对象的变化（耦合）
 *
 * 3. 对每一个目标对象，都要分别写一个代理类，很麻烦。
 *
 * @author ChangLiang
 * @date 2020/3/18
 */
public class UserDaoProxy implements IUserDao {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private IUserDao userDao = new UserDao();

    @Override
    public void save() {
        logger.info("begin transaction");
        userDao.save();
        logger.info("end transaction");
    }

    @Override
    public void find() {
        userDao.find();
    }
}
